package br.com.dufs.mvc.controller;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import javax.transaction.SystemException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import br.com.dufs.mvc.model.AbasteceAgua;
import br.com.dufs.mvc.model.AguaEstrada;
import br.com.dufs.mvc.model.Dejetos;
import br.com.dufs.mvc.model.Entrevistado;
import br.com.dufs.mvc.model.TratamentoAgua;
import br.com.dufs.mvc.service.AbasteceAguaBOService;
import br.com.dufs.mvc.service.AguaEstradaBOService;
import br.com.dufs.mvc.service.DejetosBOService;
import br.com.dufs.mvc.service.EntrevistadoBOService;
import br.com.dufs.mvc.service.TratamentoAguaBOService;

@Controller
@Scope("view")
public class AguaEstradaMB {

	private AguaEstrada aguaEstrada;

	private Entrevistado entrevistado;

	private TratamentoAgua tratamentoAgua;
	private DataModel<TratamentoAgua> listaTratamentoAgua;

	private AbasteceAgua abasteceAgua;
	private DataModel<AbasteceAgua> listaAbasteceAgua;

	private Dejetos dejetos;
	private DataModel<Dejetos> listaDejetos;

	@Autowired
	private EntrevistadoBOService entrevistadoBOService;

	@Autowired
	private AguaEstradaBOService aguaEstradaBO;

	@Autowired
	private AbasteceAguaBOService abasteceAguaBO;

	@Autowired
	private TratamentoAguaBOService tratamentoAguaBO;

	@Autowired
	private DejetosBOService dejetosBO;

	@PostConstruct
	public void filmeSelecionado() throws SystemException {
		String id = (String) FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap().get("id");

		this.aguaEstrada = new AguaEstrada();
		this.abasteceAgua = new AbasteceAgua();
		this.tratamentoAgua = new TratamentoAgua();
		this.dejetos = new Dejetos();

		if (id != null) {
			this.entrevistado = entrevistadoBOService.pesquisarPorId(id);
		}

		if (aguaEstradaBO.pesquisarPorCPF(entrevistado.getCpf()) != null)
			this.aguaEstrada = aguaEstradaBO.pesquisarPorCPF(entrevistado
					.getCpf());

	}

	public TratamentoAgua getTratamentoAgua() {
		return tratamentoAgua;
	}

	public void setTratamentoAgua(TratamentoAgua tratamentoAgua) {
		this.tratamentoAgua = tratamentoAgua;
	}

	public AbasteceAgua getAbasteceAgua() {
		return abasteceAgua;
	}

	public void setAbasteceAgua(AbasteceAgua abasteceAgua) {
		this.abasteceAgua = abasteceAgua;
	}

	public Dejetos getDejetos() {
		return dejetos;
	}

	public void setDejetos(Dejetos dejetos) {
		this.dejetos = dejetos;
	}

	public Entrevistado getEntrevistado() {
		return entrevistado;
	}

	public void setEntrevistado(Entrevistado entrevistado) {
		this.entrevistado = entrevistado;
	}

	public AguaEstrada getAguaEstrada() {
		return aguaEstrada;
	}

	public void setAguaEstrada(AguaEstrada aguaEstrada) {
		this.aguaEstrada = aguaEstrada;
	}

	public DataModel<TratamentoAgua> getListaTratamentoAgua() {

		List<TratamentoAgua> lista = tratamentoAguaBO.listaPorCPF(entrevistado
				.getCpf());

		listaTratamentoAgua = new ListDataModel<TratamentoAgua>(lista);

		return listaTratamentoAgua;
	}

	public DataModel<AbasteceAgua> getListaAbasteceAgua() {

		List<AbasteceAgua> lista = abasteceAguaBO.listaPorCPF(entrevistado
				.getCpf());

		listaAbasteceAgua = new ListDataModel<AbasteceAgua>(lista);

		return listaAbasteceAgua;
	}

	public DataModel<Dejetos> getListaDejetos() {

		List<Dejetos> lista = dejetosBO.listaPorCPF(entrevistado.getCpf());

		listaDejetos = new ListDataModel<Dejetos>(lista);

		return listaDejetos;
	}

	public void addAguaEstrada() {

		if (aguaEstradaBO.pesquisarPorId(aguaEstrada.getId()) == null) {
			aguaEstrada.setEntrevistado(entrevistado);
			aguaEstradaBO.salvar(aguaEstrada);
		} else
			aguaEstradaBO.atualizar(aguaEstrada);

	}

	public void addAbasteceAgua() {
		abasteceAgua.setEntrevistado(entrevistado);
		abasteceAguaBO.salvar(abasteceAgua);
		abasteceAgua = null;
		abasteceAgua = new AbasteceAgua();
		getListaAbasteceAgua();
	}

	public void excluirAbasteceAgua() {

		AbasteceAgua aaTemp = (AbasteceAgua) (this.listaAbasteceAgua
				.getRowData());
		abasteceAguaBO.excluir(aaTemp);
		getListaAbasteceAgua();
	}

	public void addTratamentoAgua() {
		tratamentoAgua.setEntrevistado(entrevistado);
		tratamentoAguaBO.salvar(tratamentoAgua);
		tratamentoAgua = null;
		tratamentoAgua = new TratamentoAgua();
		getListaTratamentoAgua();
	}

	public void excluirTratamentoAgua() {

		TratamentoAgua taTemp = (TratamentoAgua) (this.listaTratamentoAgua
				.getRowData());
		tratamentoAguaBO.excluir(taTemp);
		getListaTratamentoAgua();
	}

	public void addDejetos() {
		dejetos.setEntrevistado(entrevistado);
		dejetosBO.salvar(dejetos);
		dejetos = null;
		dejetos = new Dejetos();
		getListaDejetos();
	}

	public void excluirDejetos() {

		Dejetos dTemp = (Dejetos) (this.listaDejetos.getRowData());
		dejetosBO.excluir(dTemp);
		getListaDejetos();
	}

}
